package fun.shuofeng.juc.sync;

import java.util.concurrent.TimeUnit;

/**
 * @author 朔风
 * @date 2024-02-01 13:09
 */
public class Lock8Demo {
    /**
     * @Description: 8 锁
     * <p>
     * 1 标准访问，先打印短信还是邮件
     * ------sendSMS
     * ------sendEmail
     * 2 停 4 秒在短信方法内，先打印短信还是邮件
     * ------sendSMS
     * ------sendEmail
     * 3 新增普通的 hello 方法，是先打短信还是 hello
     * ------getHello
     * ------sendSMS
     * 4 现在有两部手机，先打印短信还是邮件
     * ------sendEmail
     * ------sendSMS
     * 5 两个静态同步方法，1 部手机，先打印短信还是邮件
     * ------sendSMS
     * ------sendEmail
     * 6 两个静态同步方法，2 部手机，先打印短信还是邮件
     * ------sendSMS
     * ------sendEmail
     * 7 1 个静态同步方法,1 个普通同步方法，1 部手机，先打印短信还是邮件
     * ------sendEmail
     * ------sendSMS
     * 8 1 个静态同步方法,1 个普通同步方法，2 部手机，先打印短信还是邮件
     * ------sendEmail
     * ------sendSMS
     */
    public static void main(String[] args) throws InterruptedException {

        Phone phone = new Phone();
        Phone phone2 = new Phone();

        new Thread(() -> {
            try {
                phone.sendSMS();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }, "AA").start();

        Thread.sleep(100);

        new Thread(() -> {
            phone2.sendEmail();
        }, "BB").start();

    }
}

class Phone {

    public static synchronized void sendSMS() throws InterruptedException {
        // 停留4秒
        TimeUnit.SECONDS.sleep(1);
        System.out.println("------sendSMS");
    }

    public static synchronized void sendEmail() {
        System.out.println("------sendEmail");
    }

    public void getHello() {
        System.out.println("------getHello");
    }

}
